package com.cskaoyan.javase.oop3.innerclazz6.static3;

/**
 * @description: 静态内部类自身特点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 1，访问权限修饰符
 * 四种,和成员内部类一样
 * 2，成员特点
 * 成员变量: 和普通类一模一样 啥都能定义
 * 成员方法: 和普通类一模一样 啥都能定义
 * 构造方法: 和普通类一模一样 啥都能定义
 * 以上,静态内部类的成员和普通类 别无二致
 *
 * 3，继承和实现(了解)
 * 和成员内部类没区别 继承 被继承 实现都是可以有的
 * 如果说非要有区别:
 * 在外围类当中定义的普通成员内部类不能被静态内部类继承
 * 静态内部类只能继承静态内部类
 * 这个东西作为了解
 *
 * 静态内部类最重要的特点:
 * 1,本身可以独立做一个类,完全有能力
 * 但是为了保护自己 借了外围类的壳子
 * 2,成员内部类是要依赖外围类的,但是静态内部类和外围类没有显著的依赖关系
 *
 *静态内部类的类加载机制（重要）
 * - 静态内部类是独立存在于外围类中的
 *   - 创建外围类对象，不会触发静态内部类加载
 *   - 创建静态内部类对象，也不会触发外围类的类加载
 *   - 静态内部类创建对象不依赖于外围类
 * - 类加载的过程对于内部类和外围类是完全独立的
 *
 *
 */
public class OutsideClazz { //外部类
    public static void main(String[] args) {

    }
}

class EnclosedClazz { //外围类

     static class InnerClazz  { //静态内部类
        //定义成员变量
        int a;
        private int b = 10;
        static int c = 20;
        static final int D = 30;
        //定义成员方法
        public void test(){}
        public static void testStatic(){}

        public InnerClazz() {
        }

        public InnerClazz(int a, int b) {
            this.a = a;
            this.b = b;
        }
    }
     class InnerStatic{}
}

